Django rest 框架

实例网:

xyty.klicen.com

官方文档

www.django-rest-framework.org

REST是所有Web应应用都应该遵守的架构设计指导原则

Representational State Transfer - 翻译是 ‘表现层状态转化’

REST核心 : 资源 , 状态转移, 统一接口

资源 : 是REST最明显的特征, 是指对某类信息实体的抽象, 资源是服务器上一个可命名的抽象概念的, 资源是以名词为核心来组织的, 首先关注的是名词

状态转移 :

是指客户端与服务端进行交互的过程中, 客户端能够通过对资源的表述, 实现操作资源的目的

统一接口 :

RSET要求, 必须通过统一的接口来对资源执行各种操作, 对于每个资源只能执行一组有限的操作, 比如, 客户端通过HTTP的4个请求方式(POST, GET, PUT, PATCH)来操作资源, 也就意味着, 不管你的url是什么, 不管请求的资源是什么但操作的资源接口都是统一的

GET用来获取资源 , POST用来新建资源(也可用于更新资源), PUT(PATCH)用来更新资源, DELETE用来删除资源

状态码

服务端向用户返回请求api的结果, 在结果中包含了status code 状态码的, 可以通过状态码去判断请求api的状态是成功还是失败

1
2
3
4
5
6
7
8
9
10
11
12
200 OK - [GET]: 服务器成功返回用户请求的数据, 该操作是幂等的(Idempotent)
201 CREATED - [POST/PUT/PATCH]: 用户新建或修改数据成功
202 Accepted - [*]: 表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]: 用户删除数据成功
400 INVALID REQUEST - [POST/PUT/PATCH]: 用户发出的请求有误, 服务器没有进行新建或修改数据的擦操作, 该操作是幂等的
401 Unauthorized -[*]: 表示用户没有权限(令牌, 用户名, 密码错误)
403 Forbidden - [*]: 表示用户得到授权(与401错误相对), 但是访问时被禁止的
404 NOT FOUND -[*]: 用户发出的请求针对的是不存在的记录, 服务器没有进行操作, 该操作的幂等的
406 Not Accepted - [GET]: 用户请求的格式不可得(比如用户请求JSON格式, 但只有XML格式)
410 Gone -[GET]: 用户请求的资源被永久删除, 且不会再得到的
422 Unprocesable entity - [POST/PUT/PATCH]: 当创建一个对象时, 发生一个验证错误
500 INTERNAL SERVER ERROR - [*]: 服务器发生错误, 用户将无法判断发出的请求是否成功
  1. rest

    资源 , 统一接口 , 状态转移

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    127.0.0.1:8080/app/student/ - (student为资源) : 获取所有的学生 GET

    127.0.0.1:8080/app/student/ : 创建的学生 POST

    127.0.0.1:8080/app/student/1/: 获取学生中id为1的那一个学生 GET

    127.0.0.1:8080/app/student/1/ : POST \ PUT \ PATCH

    127.0.0.1:8080/app/student/1/ : DELETE

    127.0.0.1:8080/app/grade/ : 获取所有的班级 GET

2.http请求方式

1
2
3
4
5
6
7
8
9
GET  : 用于获取

POST : 用于创建

PUT : 用于修改, 全部属性都会修改

PATCH : 用于修改, 部分属性进行修改

DELETE : 删除

3.旧接口

1
2
3
127.0.0.1:8080/app/student/?id=1

127.0.0.1:8080/app/student/1/ - 符合restframe风格

接口文档 :

4.安装 , django中使用restful

1
2
pip install djangorestframework
pip install django_filter # Filtering support

添加内容到settings配置文件

1
2
3
4
5
6
7
8
9
10
11
INSINSTALLED_APPS = (
...
'rest_framework',

)

# settings最后添加下面内容
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2,
}

添加urls.py文件中的内容

1
2
3
4
urlurlpatterns = [
...
url(r'^api-auth/', include('rest_framework.urls'))
]

5.删除

请求url:http://127.0.0.1:8000/app/api/student/2/

1
2
3
4
5
6
7
8
9
10
def destory(self, request, *args, **kwargs):
instance = self.get_objects()
self.perform_destory(instance)
return Response(status=status.HTTP_204_NO_CONTENT)

def perform_destory(self, instance):
instance.delete()

instance = self.get_object() 等价于 stu=Student.objects.get(id=2)
instance.delete() 等价于 stu.delete()

6.to_representation中instance是当前循环学生的对象

7.rest的配置, 分页配置, 还有权限设置

1
2
3
4
5
6
7
RESREST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2,
'DEFAULT_AUTHENTICATION_CLASSES':()

}
}

8.ajax 请求方式

1
2
3
4
5
6
7
$.(url, function(msg){

})

$.post(url, function(msg){

})

以上方式: url表示请求的地址, function(msg)代表, 请求成功后的回调函数, msg是api返回的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
$.aj$.ajax({
url:'', # 请求的url地址
type:'', # GET POST PATCH PUT DELETE
data:{'name':name, 'sex':sex}, # 代表请求的参数
dataType:'json',
headers:{'X-CSRFToken': csrf} # 代表传递的csrf值
success:function(msg){
成功执行回调函数
},
error:function(msg){
失败执行回调函数
}
});

API接口

code : 状态码

前端VUE框

最后更新: 2018年05月31日 20:23

原始链接: http://yoursite.com/2018/05/31/Django Rest 框架/

× 请我吃糖~
打赏二维码